﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Data.SqlClient;

namespace VerdePimienta2._0
{
    public partial class OperacionesEmpresa : Form
    {
        int CodigoVenta = 0;
        string Deuda = "0";

        string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\des_VP.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Documents and Settings\\Chema\\Mis documentos\\Visual Studio 2008\\Projects\\VerdePimienta2.0\\VerdePimienta2.0\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        
        public OperacionesEmpresa()
        {
            InitializeComponent();
        }

        public OperacionesEmpresa(int codigoVenta, string deuda)
        {
         this.CodigoVenta = codigoVenta;
         this.Deuda = deuda;
         InitializeComponent();
        }

        private void empresasBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.empresasBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.verdepimientadbDataSet);

        }

        private void OperacionesEmpresa_Load(object sender, EventArgs e)
        {
            if (CodigoVenta != 0 && Deuda != "0")
            {
                btnModificarCliente.Text = "Asociar Venta";
                btnCerrarListCli.Visible = false;

                txtCifEmpresa.ReadOnly = true;
                txtContactoEmpresa.ReadOnly = true;
                txtDeudaEmpresa.ReadOnly = true;
                txtdireccionEmpresa.ReadOnly = true;
                txtEmailEmpresa.ReadOnly = true;
                txtNombEmpresa.ReadOnly = true;
                txtObservacionesEmpresa.ReadOnly = true;
                txtpoblacionEmpresa.ReadOnly = true;
                txtRazSocialEmpresa.ReadOnly = true;
                txtTlfEmpresa.ReadOnly = true;

            }

            SqlConnection c = new SqlConnection(constring);
            c.Open();
                SqlDataAdapter da = new SqlDataAdapter("Select * from Clientes where Tipo = 'Empresa'", c);
                DataSet ds = new DataSet("Clientes");
                da.FillSchema(ds, SchemaType.Source, "Clientes");
                da.Fill(ds, "Clientes");
                DataTable dt = ds.Tables["Clientes"];

                empresasDataGridView.DataSource = ds.Tables["Clientes"].DefaultView;
            
            c.Close();
        }

        private void btnBuscarEmpresa_Click(object sender, EventArgs e)
        {
            SqlConnection c = new SqlConnection(constring);
            c.Open();
            SqlDataAdapter daB = new SqlDataAdapter("Select * From Clientes where Tipo='Empresa' and ( (Nombre = @parametro) or (CifEmpresa = @parametro) or (Telefono = @parametro) or (ContactoEmpresa = @parametro) or (RazonSocialEmpresa = @parametro) )", c);
            daB.SelectCommand.Parameters.AddWithValue("@parametro", txtNombreEmpresaBuscar.Text);
            DataSet dsB = new DataSet("Clientes");
            daB.FillSchema(dsB, SchemaType.Source, "Clientes");
            daB.Fill(dsB, "Clientes");
            DataTable tblB;
            tblB = dsB.Tables["Clientes"];

            empresasDataGridView.DataSource = dsB.Tables["Clientes"].DefaultView;
            c.Close();
        }

        private void empresasDataGridView_SelectionChanged(object sender, EventArgs e)
        {
            DataGridViewRow row = empresasDataGridView.CurrentRow;
            if (row != null)
            {
                lblId.Text = row.Cells[0].Value.ToString();
                txtNombEmpresa.Text = row.Cells[1].Value.ToString();
                txtRazSocialEmpresa.Text = row.Cells[2].Value.ToString();
                txtCifEmpresa.Text = row.Cells[3].Value.ToString();
                txtContactoEmpresa.Text = row.Cells[4].Value.ToString();
                txtTlfEmpresa.Text = row.Cells[5].Value.ToString();
                txtdireccionEmpresa.Text = row.Cells[6].Value.ToString();
                txtpoblacionEmpresa.Text = row.Cells[7].Value.ToString();
                txtEmailEmpresa.Text = row.Cells[8].Value.ToString();
                txtObservacionesEmpresa.Text = row.Cells[9].Value.ToString();
                if (row.Cells[10].Value.ToString() == "")
                {
                    txtDeudaEmpresa.Text = "0";
                }
                else
                {
                    txtDeudaEmpresa.Text = row.Cells[10].Value.ToString();
                }
            }
        }

        private void btnModificarCliente_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtNombEmpresa.Text))
            {
                MessageBox.Show("Debe rellenar el nombre del Cliente.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if ((string.IsNullOrEmpty(txtTlfEmpresa.Text)) && (string.IsNullOrEmpty(txtContactoEmpresa.Text)))
                {
                    MessageBox.Show("Debe rellenar el campo teléfono y persona de contacto.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if ((!EsNum(txtTlfEmpresa.Text)) || (!EsNum(txtDeudaEmpresa.Text)))
                    {
                        MessageBox.Show("El teléfono y el campo deuda deben ser numéricos.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        string mensaje = "";

                        if ((CodigoVenta == 0) && (Deuda == "0"))
                            mensaje = "Está seguro de modificar los datos del cliente?";
                        else
                            mensaje = "Está seguro de asociar la venta al cliente?.";

                        DialogResult dr = MessageBox.Show(mensaje,
                                      "Nuevo Cliente.",
                                      MessageBoxButtons.OKCancel,
                                      MessageBoxIcon.Question);

                        if (dr == DialogResult.OK)
                        {
                            if ((CodigoVenta == 0) && (Deuda == "0"))
                            {

                                string strSQL = "UPDATE Clientes SET" +
                                 " Nombre = '" + txtNombEmpresa.Text +
                                 "' ,RazonSocialEmpresa = '" + txtRazSocialEmpresa.Text +
                                 "' ,CifEmpresa = '" + txtCifEmpresa.Text +
                                 "' ,ContactoEmpresa = '" + txtContactoEmpresa.Text +
                                 "' ,Telefono = '" + txtTlfEmpresa.Text +
                                 "' ,Direccion = '" + txtdireccionEmpresa.Text +
                                 "' ,Poblacion = '" + txtpoblacionEmpresa.Text +
                                 "' ,Observaciones = '" + txtObservacionesEmpresa.Text +
                                 "' ,Email = '" + txtEmailEmpresa.Text +
                                 "' ,Deuda = '" + txtDeudaEmpresa.Text +
                                 "' WHERE Id = " + lblId.Text;

                                ActualizarBaseDatos(strSQL);
                            }

                            else if (CodigoVenta != 0 && Deuda != "0")
                            {
                                string modificacionVentas = "UPDATE Ventas SET IdCliente = " + lblId.Text + "WHERE Id = " + CodigoVenta;

                                ActualizarBaseDatos(modificacionVentas);

                                float incrementoDeuda = (float.Parse(txtDeudaEmpresa.Text)) + (float.Parse(Deuda));

                                string cmdActualizarDeuda = "UPDATE Clientes SET Deuda = " + (incrementoDeuda.ToString().Replace(",", ".")) + " WHERE Id = " + lblId.Text;

                                ActualizarBaseDatos(cmdActualizarDeuda);

                            }
                            else
                            {
                                string modificacionVentas = "UPDATE Ventas SET IdCliente = " + lblId.Text + "WHERE Id = " + CodigoVenta;

                                ActualizarBaseDatos(modificacionVentas);

                            }

                            resetDatosCliente();
                            this.Close();
                        }
                        else
                        {

                        }                        
                    }
                }
            }
        }

        private void ActualizarBaseDatos(string comando)
        {
            SqlConnection conexionClientes = new SqlConnection(constring);
            conexionClientes.Open();

            SqlCommand cmSQL = new SqlCommand(comando, conexionClientes);

            try
            {
                cmSQL.ExecuteNonQuery();
                conexionClientes.Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Error acceso a base de datos.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            conexionClientes.Close();
        }

        public bool EsNum(string val)
        {
            Regex _isNumber = new Regex(@"[0123456789]");
            Match m = _isNumber.Match(val);
            return m.Success;
        }

        public void resetDatosCliente()
        {
            txtNombEmpresa.Clear();
            txtRazSocialEmpresa.Clear();
            txtCifEmpresa.Clear();
            txtContactoEmpresa.Clear();
            txtTlfEmpresa.Clear();
            txtdireccionEmpresa.Clear();
            txtpoblacionEmpresa.Clear();
            txtEmailEmpresa.Clear();
            txtObservacionesEmpresa.Clear();
            txtDeudaEmpresa.Clear();            
        }

        private void btnCerrarListCli_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
